package org.puc.enquete.servlet;

import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.puc.enquete.ejb.UsuarioBeanLocal;
import org.puc.enquete.entity.Usuario;

/**
 * Este servlet controla a página de alteração dos dados de um usuário
 * Implementação: Luiz Ricardo 
 */
public class AlterarUsuario extends HttpServlet {
   
    @EJB
    private UsuarioBeanLocal usuarioBean;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

        Usuario usuarioAtual = (Usuario) request.getSession().getAttribute("usuario");
        if (usuarioAtual != null && usuarioAtual.getValido()) {

            String confirma = request.getParameter("confirma");
            if (confirma != null && confirma.equals("1")) {


                String senha = request.getParameter("senha");
                String confirmarSenha = request.getParameter("confirmar_senha");
                String nome = request.getParameter("nome");
                String email = request.getParameter("email");
                
                try {

                    //validações
                    if (senha != null && senha.length() > 0 && (confirmarSenha == null || confirmarSenha.length() < 1 || !confirmarSenha.equals(senha))) {
                        throw new Exception("A Senha e a Confirmação de Senha estão divergentes!");
                    }
                    if (nome == null || nome.length() < 5) {
                        throw new Exception("O Nome deve ter pelo menos 5 caracteres!");
                    }
                    if (email == null || email.length() < 6 || email.indexOf("@") < 1) {
                        throw new Exception("O Email deve ter pelo menos 6 caracteres e possuir um símbolo '@' (arroba)!");
                    }

                    //atualiza dados do usuário
                    usuarioAtual.setNome(nome);
                    usuarioAtual.setEmail(email);
                    if (senha != null && senha.length() > 0) {
                        usuarioAtual.setSenha(senha);
                    }
                    usuarioBean.alterarUsuario(usuarioAtual);

                    usuarioAtual = usuarioBean.recuperaUsuario(usuarioAtual.getLogin());
                    request.getSession().setAttribute("usuario", usuarioAtual);

                    request.setAttribute("mensagem", "Cadastro atualizado com sucesso!");
                    request.setAttribute("nome", usuarioAtual.getNome());
                    request.setAttribute("email", usuarioAtual.getEmail());
                    //request.setAttribute("cadastro_finalizado", "1");

                } catch (Throwable e) {

                    //coloca a mensagem de erro
                    String msg = e.getMessage();
                    if (msg == null || msg.length() == 0 && e.getCause() != null) {
                        msg = e.getCause().getMessage();
                    }
                    if (msg == null || msg.length() == 0) {
                        msg = "Ocorreu um erro: " + e.getClass().getSimpleName();
                    } else {
                        msg = msg + " (" + e.getClass().getSimpleName() + ")";
                    }
                    request.setAttribute("erro", msg);

                    //se ocorreu um erro, coloca os dados para restaurar o formulário
                    request.setAttribute("senha", senha);
                    request.setAttribute("confirmar_senha", confirmarSenha);
                    request.setAttribute("nome", nome);
                    request.setAttribute("email", email);

                }

            } else {

                // na primeira vez que entrar na tela, coloca os dados do usuário
                request.setAttribute("senha", "");
                request.setAttribute("confirmar_senha", "");
                request.setAttribute("nome", usuarioAtual.getNome());
                request.setAttribute("email", usuarioAtual.getEmail());

            }

        } else {

            if (request.getAttribute("erro") == null) {
                request.setAttribute("erro", "É necessário estar logado para acessar esta página!");
            }
            request.setAttribute("cadastro_finalizado", "1");
            
        }

        //redireciona para página de dados de usuário, com o título de alteração
        request.setAttribute("titulo", "Alterar");
        request.getRequestDispatcher("/jsp/dados_usuario.jsp").forward(request, response);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

}
